﻿using System.Text;

namespace SAPPDI.Entitys
{
    public class Pliego
    {
        private float _ancho;
        public float Ancho
        {
            get
            {
                return this._alto > this._ancho ? this._ancho : this._alto;
            }
            private set { this._alto = value; }
        }

        private float _alto;
        public float Alto
        {
            get
            {
                return this._ancho > this._alto ? this._ancho : this._alto;
            }
            private set { this._alto = value; }
        }

        private SizePagina _medidaPagina;

        public SizePagina MedidaPagina
        {
            get { return _medidaPagina; }
            set { this._medidaPagina = value; }
        }

        public string Nombre { get; set; }

        private readonly float _anchoOrig;

        private readonly float _altoOrig;

        public Pliego(float pdAlto, float pdAncho)
        {
            this._altoOrig = this._alto = pdAlto;
            this._anchoOrig = this._ancho = pdAncho;
            _medidaPagina=SizePagina.Entero;
        }

        public Pliego(Pliego elemento)
        {
            this._altoOrig = elemento._altoOrig;
            this._anchoOrig = elemento._anchoOrig;
            this._alto = elemento.Alto;
            this._ancho = elemento.Ancho;
            this.Nombre = elemento.Nombre;
        }

        public void DividePliego(SizePagina sizePagina)
        {
            this._medidaPagina = sizePagina;
            switch (sizePagina)
            {
                case SizePagina.Entero:
                    this._ancho = this._anchoOrig;
                    this._alto = this._altoOrig;
                    break;
                case SizePagina.S1_2:
                    this._alto = this._altoOrig;
                    this._ancho = this._anchoOrig / 2;
                    break;
                case SizePagina.S1_4:
                    this._alto = this._altoOrig / 2;
                    this._ancho = this._anchoOrig / 2;
                    break;
                case SizePagina.S1_8:
                    this._alto = this._altoOrig / 2;
                    this._ancho = this._anchoOrig / 4;
                    break;
                case SizePagina.S1_16:
                    this._alto = this._altoOrig / 4;
                    this._ancho = this._anchoOrig / 4;
                    break;
                case SizePagina.S1_32:
                    this._alto = this._altoOrig / 4;
                    this._ancho = this._anchoOrig / 8;
                    break;
            }
        }

        public override string ToString()
        {
            if (this._altoOrig == 1 || this._anchoOrig == 1)
                return string.Empty;
            var builder = new StringBuilder();
            builder.Append(this.Alto);
            builder.Append(" X ");
            builder.Append(this.Ancho);
            builder.Append(" cm.");
            return builder.ToString();
        }

        public string GetNombreCompleto()
        {
            if (this._altoOrig == 1 || this._anchoOrig == 1)
                return string.Empty;
            var builder = new StringBuilder();
            builder.Append(this.Nombre);
            builder.Append("  ");
            builder.Append(this.Alto);
            builder.Append(" X ");
            builder.Append(this.Ancho);
            builder.Append(" cm.");
            return builder.ToString();
        }

    }

    public class PliegoCarta : Pliego
    {
        public PliegoCarta()
            : base(57, 87)
        {
            this.Nombre = "Carta";
        }
    }

    public class PliegoOficio : Pliego
    {
        public PliegoOficio()
            : base(70, 95)
        {
            this.Nombre = "Oficio";
        }
    }

    public class PliegoCartaRebasado : Pliego
    {
        public PliegoCartaRebasado()
            : base(61, 95)
        {
            this.Nombre = "Carta Rebasado";
        }
    }
}
